四大集群管理工具大比拼
眼下,基于云的基础设施、容器、微服务以及新的编程平台占据媒体的大半篇幅,正席卷世界各地的IT部门。比如说,在最近几个月,Docker容器的使用如火如荼。我们在Docker入门介绍(Introduction to Docker)博客中特别指出,用户已经“获取”了20亿个镜像;2015年11月,获取的镜像总数就多达12亿个。从大型跨国公司到小型初创公司,这清楚地表明了容器技术在各种企业的发展势头。
集群管理工具概述
很显然,容器是构建并交付应用程序领域令人兴奋的新进展。然而,控制大批部署的容器带来了一些难题。容器必须与资源相匹配;故障必须迅速解决。这些挑战导致了同时需要集群管理工具和集群编排工具。
集群管理工具是一种软件程序,可帮助你通过图形用户界面或通过访问命令行,管理一组集群。有了这种工具,你可以监控集群中的节点,配置服务,以及管理整个集群服务器。集群管理形式不一,既有参与度很低的活动,比如将作业发送到集群,也有参与度很高的活动,比如负载均衡和可服务性。我们在本文中将会看到Swarm及另外三种流行的集群管理工具,讨论各自的优势和挑战。
Swarm – Docker
Docker Swarm让你可以把许多Docker引擎集群成一个虚拟引擎。在分布式应用程序环境下,计算元素也必须呈分布式。Swarm让你可以直接集群Docker引擎。使用单一引擎,可以更迅速、更高效地扩展应用程序。Swarm可以扩展到50000个容器和1000个节点,新容器添加到集群的过程中,对性能并没有影响。
此外,Swarm充当Docker API。可与Docker守护程序一同运行的任何工具都能利用Docker Swarm的功能,跨多个主机扩展。这包括不同的主机,比如Flynn、Compose、Jenkins和Drone。
Mesos或Kubernetes在后端运行的同时,Swarm还可以用作前端Docker客户端。就其本质而言,Swarm是一种简单的系统:每个主机运行Swarm代理和管理器。该管理器处理操作和调度容器的工作。你可以在高可用性环境下运行它,它使用Consul、ZooKeeper或etcd,将故障切换事件发送到备用系统。
Docker Swarm的优点之一在于,它是一种原生解决方案――你可以使用Docker命令,实施Docker网络、插件和卷。Swarm管理器创建几个主节点,并为领导选举( leader election)创建特定规则。万一首要的主节点出现故障,就可以实施这些管理机制。Swarm调度器拥有诸多过滤器,包括亲和标签和节点标签。过滤器可以将容器与底层节点联系起来,提高资源利用率、提升性能。
Fleet – Core OS
CoreOS是为了让你可以扩展并管理计算容量而创建的。CoreOS利用Linux容器,在更高的抽象层面处理服务,提供类似虚拟机的优点,而不是通过apt或yum安装程序包,但是又侧重于应用程序,而不是完整的虚拟化主机。
Fleet让你可以在共享单个init系统的场景下使CoreOS集群概念化。有了Fleet,每个机器都有一个代理和引擎。单一引擎在集群中随时处于活动状态,但是整批引擎始终处于活动状态。Fleet还能处理套接字激活(socket activation)――可以激活容器,处理用到某个特定端口的连接。这让系统可以在需要时创建进程,而不是等待需求。
你的开发运维人员花时间致力于管理作为服务构建模块的容器上,用不着担心可能在单个机器上出现的潜在问题。Fleet确保容器在集群上正常运行。万一哪台机器出现故障,容器会自动迁移到正常运行的机器上。
Kubernetes –谷歌
Kubernetes由谷歌开发,它让你可以跨许多不同的主机管理容器化应用程序。它为你提供了部署、扩展和维护应用程序的工具。Kubernetes的开发人员专注于确保Kubernetes易于访问、占用资源少和易于使用。它可以用在许多云环境下,包括私有云、公共云、多云和混合云。它旨在可以迅速自我修复,具有自动复制、自动重启和自动安置功能。它具有无限扩展性,旨在可以钩连、可插入、模块化,而且完全开源。2014年,谷歌首次宣布了Kubernetes,第一个版本于2015年夏天发布。尽管历史不长,Kubernetes却是谷歌凭借在容器领域的多年经验开发而成的。
Kubernetes使用pod,pod充当容器组,可以同时加以调度和部署。pod是用于调度的基本配置单位,因为在对比系统中,单个容器被认为是基本单位。大多数pod最多由5个容器组成服务。根据要求和需求变化,可以实时构建并消除pod。
Kubernetes是一组松散耦合的基本组件,可以在许多不同的工作负载下运行。它高度依赖Kubernetes API,确保可扩展性。该API在内部使用,也可以供系统上运行的外部容器和插件使用。实施了Kubernetes的企业组织包括:维基媒体基金会已从自主开发的环境迁移到Kubernetes;电子港湾在OpenStack上运行Kubernetes和容器;维亚康姆正在使用Kubernetes构建一套高级的容器化基础设施。
Mesos – Apache
Apache Mesos是在加州大学伯克利分校设想并开发而来的,这种集群管理工具专注于跨分布式网络或框架,有效地隔离资源,并共享应用程序。作为一种开源系统,它让管理员能够共享资源,并提高集群利用率。目前使用Apache Mesos的公司包括苹果、Airbnb和推特。
对CPU、磁盘和内存等计算单元而言,Apache Mesos是一个抽象层。它在每个机器上运行,一个机器被指定为运行其他所有机器的主节点(master)。任何Linux程序都可以在Mesos上运行。Mesos的一个优点就是,为防范故障提供了另一层保护。
Mesos旨在处理成千上万个主机。它支持来自众多租户的工作负载。在Mesos配置环境下,你可能会发现Docker与Hadoop并排运行。几年前,Mesos成为支持推特迅速拓展的系统后,备受关注。
Mesos使用代理节点系统来运行任务。代理将一系列可用资源发送到主节点。随时都有数百个至数千个代理节点在运行。反过来,主节点将任务分配给各代理。
比较不同的容器编排工具
Kubernetes是一种标准的容器管理平台,具有调度、实时升级、自动扩展和不断监控运行状况等功能。相比之下,Docker Swarm侧重于借助单一Docker引擎,从整个系统了解集群的情况。
Mesos和Kubernetes很相似,原因是它们是为了解决在集群环境下运行应用程序的问题开发的。Mesos不像Kubernetes那样专注于运行中的集群,而是专注于这些功能特性:强大的调度功能和插入众多调度器的功能。这一方面是由于,Mesos是在最近大行其道的容器之前开发的,它在某些方面进行了改动,以支持容器。
Fleet使用etcd和systemd,前者是CoreOS随带的键值对,后者是面向Linux的系统和服务管理器。systemd是专门为单一机器设计的,不过Fleet可将功能扩展到一群机器。Fleet让你可以运行一个服务的几个实例,有助于防止故障。它可以将单个容器部署到任何位置,在一个机器或几个机器上运行容器,并部署同一容器的多个实例。
另一方面,Fleet并不是很擅长处理分布式微服务环境下出现的一些情况,比如服务注册、基于资源使用情况的调度、服务发现,或者是容器之间的联系。Fleet将自己定位于这四种工具中的一种低调的集群引擎,所以它最好是作为Kubernetes等其他解决方案可以在上面运行的一层。
编排工具满足不断增长的需求
如今的企业需要能够满足计算要求的冗余系统,又没有故障。此外,大数据和数据挖掘需要大量资源,以便筛选海量信息。除非公司适应并改动其信息系统方法,否则很快就会输给更快速、更灵活的竞争对手。
在高速大规模计算盛行的这个时代,搞定单个机器并不是一种有效的方法。分布式系统让你可以迅速将坏掉的机器扔到垃圾箱,将资源重新分配给集群上正常运行的节点。这就是为什么管理Docker及其他容器集群很重要。
我们在本文中关注了几种强大的集群管理和编排工具,它们可以在分布式环境下有效地维护、配置和扩展容器。选择最佳工具,取决于哪个能最有效地应对你计算环境的挑战。在此基础上,找到有助于让贵企业能够在容器化和微服务快速发展的当下取得成功的那种解决方案。
云头条编译|未经授权谢绝转载
相关阅读:
容器交流群欢迎加入,群主微信:aclood